📖 목차
-
1. 정의
2. 사용 목적
3. 사용 방법
4. 예제
5. 관련 메서드와의 비교
1. 정의
@staticmethod는 파이썬 클래스 내부에서 정의되는 메서드를 "정적 메서드(static method)"로 지정하기 위해 사용하는 데코레이터이다. 정적 메서드는 클래스나 인스턴스의 상태와 무관하게 작동하는 독립적인 메서드로, 클래스 이름 또는 인스턴스를 통해 호출할 수 있다.
2. 사용 목적
- 클래스와 직접 관련되지만, 인스턴스 상태나 클래스 상태를 참조할 필요가 없는 로직을 정의할 때 사용한다.
- 유틸리티 함수 또는 계산 로직 등 객체의 속성에 의존하지 않는 기능을 구현할 때 적합하다.
3. 사용 방법
정적 메서드는 클래스 내부에서 정의하되, @staticmethod 데코레이터를 사용하고, 메서드 정의 시 self나 cls를 첫 번째 인자로 받지 않는다. 호출 시에는 클래스명 또는 인스턴스를 통해 호출할 수 있다.
class Math:
@staticmethod
def add(x, y):
return x + y
# 호출 방법
Math.add(3, 5) # 클래스명으로 호출
m = Math()
m.add(3, 5) # 인스턴스로도 호출 가능
4. 예제
class Account:
numOfAccounts = 0
def __init__(self, name):
self.name = name
Account.numOfAccounts += 1
@staticmethod
def reset_count():
Account.numOfAccounts = 0
reset_count()는Account클래스의 정적 메서드로, 인스턴스 없이 클래스 변수에 접근하여 초기화 작업을 수행한다.- 인스턴스 변수나
self,cls를 참조하지 않기 때문에 정적 메서드로 구현하는 것이 적절하다.
5. 관련 메서드와의 비교
| 구분 | 일반 메서드 | 클래스 메서드 | 정적 메서드 |
|---|---|---|---|
| 데코레이터 | (없음) | @classmethod | @staticmethod |
| 첫 번째 인자 | self (인스턴스) | cls (클래스) | 없음 |
| 클래스 변수 접근 | 가능 | 가능 | 클래스명을 통해 수동 접근 |
| 인스턴스 변수 접근 | 가능 | 불가능 | 불가능 |
| 용도 | 인스턴스 동작 구현 | 클래스 상태 제어 | 독립적 기능 제공 |